/*
 * @Description: 表格相关工具函数
 * @Author: Rfan
 * @Date: 2022-01-05 16:25:54
 * @LastEditTime: 2022-09-23 18:36:26
 */

/**
 * @description: 根据id删除项目
 * @param {number|string} id 删除项目id
 * @param {Array<Object>} list 原表格数据列表
 * @param {string} key 校验的字段
 * @return {Array<any>} 处理后的表格数据列表
 */
export function delItemById(id, list, key = 'id') {
  return list.filter((item) => item[key] !== id);
}

/**
 * @description: 根据id数组删除项目
 * @param {number[]} ids 删除项目id数组
 * @param {Array<Object>} list 原表格数据列表
 * @param {string} key 判断字段
 * @return {Array<Object>} 处理后的表格数据列表
 */
export function delItemByIdArray(ids, list, key = 'id') {
  return list.filter((item) => ids.indexOf(item[key]) < 0);
}

/**
 * @description:根据id更新项目
 * @param {Key} id 更新项目id
 * @param {Object} data 更新数据
 * @param {Array<Object>} list 原表格数据列表
 * @param {string} key 对应字段
 * @return {Array<any>} 处理后的表格数据列表
 */
export function editItemById(id, data, list, key = 'id') {
  if (id === null || id === undefined) {
    return list;
  }
  for (let i = 0; i < list.length; i++) {
    if (list[i][key] === id) {
      list.splice(i, 1, data);
    }
  }
  return list.map((item) => item);
}

/**
 * @description:根据id插入字段
 * @param {number} id 更新项目id
 * @param {Object} data 插入的数据
 * @param {Array<Object>} list 原表格数据列表
 * @param {string} key 对应字段
 * @return {Array<Object>} 处理后的表格数据列表
 */
export function updateItemById(id, data, list, key = 'id') {
  for (let i = 0; i < list.length; i++) {
    if (list[i][key] === id) {
      list.splice(i, 1, { ...list[i], ...data });
    }
  }
  return list.map((item) => item);
}

/**
 * @description: 表格插入新增加项目
 * @param {Object} data 新增数据数据
 * @param {Array<Object>} list 原表格数据列表
 * @returns {Array<Object>} 处理后的表格数据列表
 */
export function insertItem(data, list) {
  // console.log('===========', data, list);
  list.unshift(data);
  list.pop();
  return list.map((item) => item);
}

/**
 * @description: 表格插入新增加项目
 * @param {Object} data 新增数据数据
 * @param {Array<Object>} list 原表格数据列表
 * @returns {Array<Object>} 处理后的表格数据列表
 */
export function insertItemAfter(data, list) {
  list.push(data);
  return list.map((item) => item);
}

/**
 * @description: 根据某个key返回选中的item
 * @param {number|string} val 判断的内容
 * @param {Array<any>} list 原表格数据列表
 * @param {string} key 校验的字段
 * @return {any} 处理后的表格数据列表
 */
export function selectItemByKey(val, list, key = 'id') {
  return list.find((item) => item[key] === val) || null;
}

/**
 * @description: 根据某个key返回选中的item制定字段的值
 * @param {number|string} val 判断的内容
 * @param {Array<object>} list 原表格数据列表
 * @param {string} nameKey 返回字段的key
 * @param {string} key 校验的字段
 * @return {string} 处理后的表格数据列表
 */
export function getListItemValue(val, list, nameKey = 'name', key = 'id') {
  const item = selectItemByKey(val, list, key);
  return item && item[nameKey] ? item[nameKey] : '';
}

/**
 * @description: 根据表字段展示表格title
 * @param {string} field 表字段
 * @param {Array<Object>} list 原数据列表
 * @return {string}
 */
export function displayTitle(field, list) {
  const name = list.find((item) => item.field_name === field);
  return name?.field_desc || '';
}

/**
 * @description: 根据表字段展示表格title
 * @param {string} obj 返回的list中某个item的完整字段
 * @param {Array<Object>} list 原数据列表
 * @return {string[]}
 */
export function showKeysList(obj, list) {
  return obj ? Object.keys(obj).filter((key) => list.find((item) => item.field_name === key)) : [];
}

/**
 * @description: 根据表字段展示表格title
 * @param {Array<Object>} list 原数据列表
 * @param {any} actionCol 操作列
 * @return {string[]}
 */
export function initAntdColumns(list, actionCol) {
  const _list = list.map((item) => {
    item.title = item.field_desc;
    item.key = item.field_name;
    item.dataIndex = item.field_name;
    return item;
  });
  _list.push(actionCol);
  return _list;
}

/*
 * @description:根据id插入条件
 * @param {number} id 更新项目id
 * @param {Object} data 插入的数据
 * @param {Array<Object>} list 原表格数据列表
 * @param {string} key 对应字段
 * @return {Array<Object>} 处理后的表格数据列表
 */
export function updateAdvanceById(id, data, list, key = 'fondsId') {
  console.log(id, data, list);
  if (list.length === 0) {
    list.push(data);
  } else {
    for (let i = 0; i < list.length; i++) {
      if (list[i][key] === id) {
        list[i].atScopeList.push(data.atScopeList[0]);
        // list.splice(i, 1, { list });
      } else {
        list.push(data);
        break;
        // console.log('fvfvfv');
        // list.push(data);
      }
    }
  }
  return list;
}
